//
//  DOMXMLHandler.m
//  UI15_XML_JSON数据结构解析
//
//  Created by Scott on 15/5/16.
//  Copyright (c) 2015年 www.lanou3g.com 蓝欧3G. All rights reserved.
//

#import "DOMXMLHandler.h"
#import "GDataXMLNode.h" /* 导入第三方类 */
#import "StudentModel.h"

@implementation DOMXMLHandler


#pragma mark - 知识点3 DOM方式解析XML数据
/**
 * @brief 讲解:
 *
 * DOM:Document Object Model (文档对象模型).
 *
 * 解析时需要将XML文件整体读入, 并且将XML结构化成树状, 使用时再通过树状结构读取相关数据
 *
 * 使用的类是第三方类:GDataXMLNode
 * Google提供的开源XML解析类, 对libxml2.dylib 进行了Objective-C的封装
 * 采用DOM方式解析数据
 *
 * iOS 中包含一个C语言的动态链接库 libxml2.dylib , 解析速度比NSXMLParse快.
 *
 *
 * 进入Build Settings 里面找到Search Paths 然后修改Header Search Paths, 在debug中添加一项
    $(SDKROOT)/usr/include/libxml2
 * 同时在Build Phases 的framework中导入 libxml2.lib
 */


- (void)startDOMParse
{
    self.arr = [NSMutableArray array];
    
    /* DOM 解析: 按节点解析 */
    
    /* 1. 获取xml文件 */
    
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
    
    NSData *data = [NSData dataWithContentsOfFile:filePath];
    
    /* 2. 创建GDataXMLDocument对象 */
    
    NSError *error = nil; /* 错误信息 */
    GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:1 error:&error];
    
    /* 3. 获取根节点 */
    GDataXMLElement *rootElement = [document rootElement];
    
    /* 4. 找子节点 
     *  将所有叫 student 的节点放到一个数组中
     */
    NSArray *arr = [rootElement elementsForName:@"student"];
    
    /* 对数组进行遍历 */
    for (GDataXMLElement *element in arr) {
        NSArray *nameArr = [element elementsForName:@"name"];
        
        NSString *name = [[nameArr lastObject] stringValue];
        
        StudentModel  *stu = [[StudentModel alloc] init];
        stu.name = name;
        
        stu.sex = [[[element elementsForName:@"sex"] lastObject
                    ] stringValue];
        
//        stu.number = [[[element elementsForName:@"number"] lastObject] integerValue];
        
        stu.number = [[[[element elementsForName:@"number"] lastObject] stringValue] integerValue];
        
//        stu.age = [[[element elementsForName: @"age"] lastObject] integerValue];
        stu.age = [[[[element elementsForName:@"number"] lastObject] stringValue] integerValue];
        
        [self.arr addObject:stu];
        [stu release];
        
    }
    
}


@end
